<?php

	session_start();
	require_once("../lib/Conexao.php");
	require_once("../lib/CONFIG.php");
	require_once("../lib/campos.php");
	        
   	class Usuario{
                        
    	var $conexao;
                
       	public function Usuario(){
        	$con            = new Conexao();
            $this->conexao  = $con->conexao;
        }
		
		public function init($dadosObj){
			$retorno = array();
			
			$buscaPerfil  = $this->getPerfil();
			if(isset($buscaPerfil["erro"])){
				$retorno["erro"] = $buscaPerfil["erro"];
				return $retorno; 
			}
			
			$buscaModulo  = $this->getModulo();
			if(isset($buscaModulo["erro"])){
				$retorno["erro"] = $buscaModulo["erro"];
				return $retorno; 
			}
			
			$retorno["perfil"] = $buscaPerfil["dados"];
			$retorno["modulo"] = $buscaModulo["dados"];
			
			return $retorno;
		}
		
		private function getPerfil(){
			$retorno = array();
			$perfils = array();
			
			$sql = "SELECT 
							id,
							descricao,
							excluido
					FROM
					     perfil  
					WHERE
					     excluido = 'N'
					ORDER BY descricao";
						 
			$res = $this->conexao->Execute($sql);
			
			if(!$res){
				$retorno["erro"] = "Erro ao carregar perfil!";
				return $retorno;
			}
			
			while(!$res->EOF){
				
				$perfil   				= array();
				$perfil["id"]   		= $res->fields["id"];
				$perfil["descricao"]	= utf8_encode($res->fields["descricao"]);
				$perfil["excluido"]     = $res->fields["excluido"];
				
				$perfils  []            = $perfil;
				
				$res->MoveNext();
			}
			
			$retorno["dados"] = $perfils;
			return $retorno;
		}
		
		public function getModulo(){
			$retorno     = array();
			$arrayModulo = array();
			
			$sql = "SELECT 
						id,
						descricao 
					FROM
						modulo 
					ORDER BY descricao";
			
			$res = $this->conexao->Execute($sql);
			
			if(!$res){
				$retorno["erro"] = "Erro ao carregar modulos!";
				return $retorno;
			}
			
			while(!$res->EOF){
				
				$modulo   				= array();
				$modulo["id"]   		= $res->fields["id"];
				$modulo["descricao"]	= utf8_encode($res->fields["descricao"]);
				
				$arrayModulo  []        = $modulo;
				
				$res->MoveNext();
			}
			
			$retorno["dados"] = $arrayModulo;
			
			return $retorno;
		}
		
		public function save($dadosObj){
			$retorno = array();
			
			// VALIDA OS CAMPOS
			$valida = $this->validaCampos($dadosObj);
			if(isset($valida["erro"])){
				$retorno["erro"] = $valida["erro"];
				return $retorno;
			}
			
			$dadosObj->nome = strtoupper($dadosObj->nome);
			
			if($dadosObj->id > 0){
				$gravar = $this->atualiza($dadosObj);
			}else{
				$gravar = $this->gravar($dadosObj);
			}
			
			if(isset($gravar["erro"])){
				$retorno["erro"] = $gravar["erro"]; 
			}
			
			return $retorno;
		}
		
		public function gravar($dadosObj){
			$retorno = array();
			
			$sql = "INSERT INTO 
						usuario 
					( 
						 perfil_id, 
						 nome, 
						 email, 
						 login, 
						 senha, 
						 ativo, 
						 excluido
					) 
						VALUES 
					(
						{$dadosObj->perfil},
						'{$dadosObj->nome}',
						'{$dadosObj->email}',
						'{$dadosObj->login}',
						'".md5($dadosObj->senha)."',
						'{$dadosObj->ativo}',
						'N'
					)";
					
			$res = $this->conexao->Execute($sql);
			
			if(!$res){
				$retorno["erro"] = "Erro ao gravar usuário!";
			}
			
			return $retorno;
		}
		
		public function atualiza($dadosObj){
			$retorno = array();
			$compl   = ""; 
			
			if(isset($dadosObj->senha)){
				$compl = "senha = '".md5($dadosObj->senha)."',";
			}
			
			$sql = "UPDATE 
							usuario 
					SET
							perfil_id 	= {$dadosObj->perfil}, 
							nome 		= '{$dadosObj->nome}', 
							email 		= '{$dadosObj->email}', 
							login 		= '{$dadosObj->login}', 
							{$compl} 
							ativo 		= '{$dadosObj->ativo}' 
					WHERE
							id          = {$dadosObj->id}";
			
			$res = $this->conexao->Execute($sql);
			
			if(!$res){
				$retorno["erro"] = "Erro ao gravar usuário!";
				return $retorno;
			}
			
			$salvaModulos = $this->gravaModulo($dadosObj);
			if(isset($salvaModulos["erro"])){
				$retorno["erro"] = $salvaModulos["erro"];
			}
			
			return $retorno;
		}
		
		public function gravaModulo($dadosObj){
			$retorno = array();
			
			// DELETA OS DADOS ANTERIORES
			
			$sqlAnterio = " DELETE
							FROM 
								modulo_usuario
							WHERE 
							   usuario_id = {$dadosObj->id}";
							   
		    $resAnterior = $this->conexao->Execute($sqlAnterio);
			
			if(!$resAnterior){
				$retorno["erro"] = "Erro ao deletar dados anteriores do modulo!";
				return $retorno;
			}
			
			// GRAVA OS NOVOS DADOS
			foreach($dadosObj->modulos as $moduloObj){
					
				$sql  = "INSERT INTO 
							modulo_usuario 
						(
							modulo_id, 
							usuario_id
						) 
							VALUES 
						(
							{$moduloObj->id},
							{$dadosObj->id}
						)";
				
				$res = $this->conexao->Execute($sql);
				
				if(!$res){
					$retorno["erro"] = "Erro ao gravar modulos!";
					return $retorno;
				}
				 
			}
			
			return $retorno;
		}
		
		
		public function validaCampos($dadosObj){
			$retorno = array();
			
			$camposValida = getCadUsuario($dadosObj);
			
			foreach($camposValida  as $campos ){
				
				if($campos["valor"] == ""){
					$retorno["erro"] = $campos["erro"];
					return $retorno;
				}
				
			}
			
			if(isset($dadosObj->senha)){
				if($dadosObj->senha != $dadosObj->confirmacao){
					$retorno["erro"] = "O campo SENHA e CONFIRMAÇÃO são diferentes!";	
				}
			}
			
			return $retorno;
		}
		
		public function getDadosZoom($dadosObj){
			$retorno = array();
			$compl   = "";
			// SE O CAMPO SELECIONADO FOR CODIGO VALIDA SE É NUMERICO
			if(isset($dadosObj->cbbCampo)){
				if(($dadosObj->cbbCampo == 1 ) && $dadosObj->txiValor){
					if(!is_numeric($dadosObj->txiValor)){
						$retorno["erro"] = "Digite um valor numérico!";
						return $retorno;
					}
					
					$compl = "AND id = {$dadosObj->txiValor}";
				}else if(($dadosObj->cbbCampo == 2) && $dadosObj->txiValor){
					$compl = "AND nome like '%".addslashes(utf8_decode($dadosObj->txiValor))."%'";
				}
			}
			
			$sql = "SELECT 
							id,
							nome 
					FROM  
							usuario
					WHERE
					        excluido = 'N'
					{$compl}";
					
		    $res = $this->conexao->Execute($sql);
		    
		    if(!$res){
		    	$retorno["erro"] = "Erro ao carregar registros!";
		    	return $retorno;
		    }
			
			if($res->RecordCount()){
				
				while(!$res->EOF){
					
					$usuarioObj         = array();
					$usuarioObj["id"] 	= $res->fields["id"];
					$usuarioObj["nome"]	= utf8_encode($res->fields["nome"]);
					
					$retorno["registros"][]     = $usuarioObj;
					
					$res->MoveNext();
				}
				
			}else{
				$retorno["erro"] = "Não foram localizados registros com o filtro informado!";
		    	return $retorno;
			}
			return $retorno;
		}
		
		public function getDadosAlterar($dadosObj){
			$retorno   = array();
	
		    $sql = "SELECT 
							id,
							nome,
							email,
							login,
							perfil_id,
							ativo 
					FROM  
							usuario
					WHERE  
					        id = {$dadosObj->id}";
					  
			$res  = $this->conexao->Execute($sql);
			
			if((!$res) || (!$res->RecordCount())){
				$retorno["erro"] = "Erro ao carregar dados para alterar!";
				return $retorno;
			}
				
			$registro               = array();
			$registro["id"]         = $res->fields["id"];
			$registro["nome"]       = utf8_encode($res->fields["nome"]);
			$registro["email"]      = utf8_encode($res->fields["email"]);
			$registro["login"]      = utf8_encode($res->fields["login"]);
			$registro["perfil"]     = $res->fields["perfil_id"];
			$registro["ativo"]      = utf8_encode($res->fields["ativo"]);
			
			// CARREGA OS MODULOS
			$carregaModulo = $this->carregaModulos($res->fields["id"]);
			if(isset($carregaModulo["erro"])){
				$retorno["erro"] = $carregaModulo["erro"];
				return $retorno;
			}
			
			$registro["modulos"]    = $carregaModulo["dados"]; 
			
			$retorno["registro"]    = $registro;
			
			return $retorno;
		}
		
		
		public function carregaModulos($idUsuario){
			$retorno     = array();
			$arrayModulo = array();
			
			$sql = "SELECT
						m.id as id,
						m.descricao as descricao
					FROM
					    modulo_usuario mu INNER JOIN modulo m ON mu.modulo_id = m.id
					WHERE
					    mu.usuario_id = {$idUsuario}
					ORDER BY m.descricao";
			
			$res = $this->conexao->Execute($sql);
			
			if(!$res){
				$retorno["erro"] = "Erro ao carregar modulos!";
				return $retorno;
			}
			
			while(!$res->EOF){
				
				$modulo   				= array();
				$modulo["id"]   		= $res->fields["id"];
				$modulo["descricao"]	= utf8_encode($res->fields["descricao"]);
				
				$arrayModulo  []        = $modulo;
				
				$res->MoveNext();
			}
			
			$retorno["dados"] = $arrayModulo;
			return $retorno;
		}
		
		/*
		 * DELETA UM REGISTRO
		 * 
		 * */
		
		public function deletar($dadosObj){
			$retorno = array();
			
			$sql = "UPDATE 
						  usuario
					SET
						  excluido = 'S',
						  ativo    = 'N'
					WHERE 
					      id = {$dadosObj->id}";
					      
			$res = $this->conexao->Execute($sql);
			
			if(!$res){
				$retorno["erro"] = "Erro ao deletar registro!";
				return $retorno;
			}
			
			return $retorno;
		}
		
    }
	                 
    $retorno  = array();
    $usuario  = new Usuario(); 
	        
	// PEGA OS DADOS ENVIADOS PELO JS
	$dados    = file_get_contents("php://input");
	$dadosObj = json_decode($dados);
	        
	switch($dadosObj->acao){
    
		case "init":
                $retorno = $usuario->init($dadosObj);                            
        break;
		case "save":
                $retorno = $usuario->save($dadosObj);                            
        break;
		case "getDadosZoom":
                $retorno = $usuario->getDadosZoom($dadosObj);                            
        break;
		case "getDadosAlterar":
                $retorno = $usuario->getDadosAlterar($dadosObj);                            
        break;
		case "deletar":
                $retorno = $usuario->deletar($dadosObj);                            
        break;
			           
	}
	
	$retorno  =  json_encode($retorno);
	echo $retorno;
?>